package springmvc.param.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * description: 01
 * TODO：@RequestMapping 接收前端访问路径、进阶注解 @GetMapping @PostMapping @PutMapping @DeleteMapping
 *
 * 1. @Controller 用于类路径扫描时注册到IOC容器
 * 2. @RequestMapping() 拦截请求，修饰方法时将handler注册到HandlerMapping
 *
 * 3. @RequestMapping() 和 @WebServlet()
 *      @WebServlet("必须使用 /开头")
 *      @RequestMapping("不强制要求使用/开头") ，可以用 "user/login"或 “/user/login”
 *          1. 支持拦截一个或多个精准地址，@RequestMapping("/user/login“)，@RequestMapping({"login", "logout"})
 *          2. 支持模糊搜索， * 表示匹配任意一层字符串 （如 /user/* 可以匹配拦截 user/a 或 user/b，但/user/a/b 不行），** 表示任意层任意字符串（
 *              如 /user/** 可以匹配拦截 user/a 或 user/a/a/a/a/a/a）
 *          3. @RequestMapping修饰类，表示类中所有方法的公共访问路径；修饰方法是具体的handler地址。访问路径=类地址 + 方法地址。
 *              方法上必须加 @RequestMapping 注解，才会注册到HandlerMapping，才能拦截访问。
 *              如果方法上的 @RequestMapping 不跟路径，则默认为类注解标识的公共访问路径
 *
 *  4. 请求方式指定
 *      handler可以指定客户端访问方式(get | post | put | delete )
 *      默认情况下只要访问地址正确,任何请求方式都可以访问
 *      通过method = {RequestMethod.GET,RequestMethod.POST}指定请求方式
 *      不符合的请求方式会出现405异常
 *
 *  5. 进阶注解只能使用在方法上，类上只提取公共路径，不指定通用方法
 *  get     @GetMapping  == @RequestMapping(xxx,method=GET);
 *  post    @PostMapping  == @RequestMapping(xxx,method=POST);
 *  put     @PupMapping  == @RequestMapping(xxx,method=PUT);
 *  delete  @DeleteMapping  == @RequestMapping(xxx,method=DELETE);
 */

@Controller
@RequestMapping("user")
public class UserController {

    // 将Handler注册到HandlerMapping，不跟路径时使用类的公共访问路径 /user
    @RequestMapping("index")
    @GetMapping
    public String index(){
        return null;
    }

    @RequestMapping(value = "login",method = RequestMethod.POST)
    @PostMapping("login")
    public String login(){
        return null;
    }

    @RequestMapping(value = "register", method = {RequestMethod.GET,RequestMethod.POST})
    public String register(){
        return null;
    }

}
